---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.12.0
  labels:
    heritage: deckhouse
    module: node-manager
    cluster.x-k8s.io/provider: cluster-api
  name: clusters.cluster.x-k8s.io
spec:
  group: cluster.x-k8s.io
  names:
    categories:
      - cluster-api
    kind: Cluster
    listKind: ClusterList
    plural: clusters
    singular: cluster
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - description: Cluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
          jsonPath: .status.phase
          name: Phase
          type: string
        - description: Time duration since creation of Cluster
          jsonPath: .metadata.creationTimestamp
          name: Age
          type: date
        - description: Kubernetes version associated with this Cluster
          jsonPath: .spec.topology.version
          name: Version
          type: string
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: Cluster is the Schema for the clusters API.
          properties:
            apiVersion:
              description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
              type: string
            kind:
              description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
              type: string
            metadata:
              type: object
            spec:
              description: ClusterSpec defines the desired state of Cluster.
              properties:
                clusterNetwork:
                  description: Cluster network configuration.
                  properties:
                    apiServerPort:
                      description: APIServerPort specifies the port the API Server should
                        bind to. Defaults to 6443.
                      format: int32
                      type: integer
                    pods:
                      description: The network ranges from which Pod networks are allocated.
                      properties:
                        cidrBlocks:
                          items:
                            type: string
                          type: array
                      required:
                        - cidrBlocks
                      type: object
                    serviceDomain:
                      description: Domain name for services.
                      type: string
                    services:
                      description: The network ranges from which service VIPs are allocated.
                      properties:
                        cidrBlocks:
                          items:
                            type: string
                          type: array
                      required:
                        - cidrBlocks
                      type: object
                  type: object
                controlPlaneEndpoint:
                  description: ControlPlaneEndpoint represents the endpoint used to
                    communicate with the control plane.
                  properties:
                    host:
                      description: The hostname on which the API server is serving.
                      type: string
                    port:
                      description: The port on which the API server is serving.
                      format: int32
                      type: integer
                  required:
                    - host
                    - port
                  type: object
                controlPlaneRef:
                  description: ControlPlaneRef is an optional reference to a provider-specific
                    resource that holds the details for provisioning the Control Plane
                    for a Cluster.
                  properties:
                    apiVersion:
                      description: API version of the referent.
                      type: string
                    fieldPath:
                      description: 'If referring to a piece of an object instead of
                      an entire object, this string should contain a valid JSON/Go
                      field access statement, such as desiredState.manifest.containers[2].
                      For example, if the object reference is to a container within
                      a pod, this would take on a value like: "spec.containers{name}"
                      (where "name" refers to the name of the container that triggered
                      the event) or if no container name is specified "spec.containers[2]"
                      (container with index 2 in this pod). This syntax is chosen
                      only to have some well-defined way of referencing a part of
                      an object. TODO: this design is not final and this field is
                      subject to change in the future.'
                      type: string
                    kind:
                      description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                      type: string
                    name:
                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                      type: string
                    namespace:
                      description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                      type: string
                    resourceVersion:
                      description: 'Specific resourceVersion to which this reference
                      is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                      type: string
                    uid:
                      description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                      type: string
                  type: object
                  x-kubernetes-map-type: atomic
                infrastructureRef:
                  description: InfrastructureRef is a reference to a provider-specific
                    resource that holds the details for provisioning infrastructure
                    for a cluster in said provider.
                  properties:
                    apiVersion:
                      description: API version of the referent.
                      type: string
                    fieldPath:
                      description: 'If referring to a piece of an object instead of
                      an entire object, this string should contain a valid JSON/Go
                      field access statement, such as desiredState.manifest.containers[2].
                      For example, if the object reference is to a container within
                      a pod, this would take on a value like: "spec.containers{name}"
                      (where "name" refers to the name of the container that triggered
                      the event) or if no container name is specified "spec.containers[2]"
                      (container with index 2 in this pod). This syntax is chosen
                      only to have some well-defined way of referencing a part of
                      an object. TODO: this design is not final and this field is
                      subject to change in the future.'
                      type: string
                    kind:
                      description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                      type: string
                    name:
                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                      type: string
                    namespace:
                      description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                      type: string
                    resourceVersion:
                      description: 'Specific resourceVersion to which this reference
                      is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                      type: string
                    uid:
                      description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                      type: string
                  type: object
                  x-kubernetes-map-type: atomic
                paused:
                  description: Paused can be used to prevent controllers from processing
                    the Cluster and all its associated objects.
                  type: boolean
                topology:
                  description: 'This encapsulates the topology for the cluster. NOTE:
                  It is required to enable the ClusterTopology feature gate flag to
                  activate managed topologies support; this feature is highly experimental,
                  and parts of it might still be not implemented.'
                  properties:
                    class:
                      description: The name of the ClusterClass object to create the
                        topology.
                      type: string
                    controlPlane:
                      description: ControlPlane describes the cluster control plane.
                      properties:
                        machineHealthCheck:
                          description: MachineHealthCheck allows to enable, disable
                            and override the MachineHealthCheck configuration in the
                            ClusterClass for this control plane.
                          properties:
                            enable:
                              description: "Enable controls if a MachineHealthCheck
                              should be created for the target machines. \n If false:
                              No MachineHealthCheck will be created. \n If not set(default):
                              A MachineHealthCheck will be created if it is defined
                              here or in the associated ClusterClass. If no MachineHealthCheck
                              is defined then none will be created. \n If true: A
                              MachineHealthCheck is guaranteed to be created. Cluster
                              validation will block if `enable` is true and no MachineHealthCheck
                              definition is available."
                              type: boolean
                            maxUnhealthy:
                              anyOf:
                                - type: integer
                                - type: string
                              description: Any further remediation is only allowed if
                                at most "MaxUnhealthy" machines selected by "selector"
                                are not healthy.
                              x-kubernetes-int-or-string: true
                            nodeStartupTimeout:
                              description: Machines older than this duration without
                                a node will be considered to have failed and will be
                                remediated. If you wish to disable this feature, set
                                the value explicitly to 0.
                              type: string
                            remediationTemplate:
                              description: "RemediationTemplate is a reference to a
                              remediation template provided by an infrastructure provider.
                              \n This field is completely optional, when filled, the
                              MachineHealthCheck controller creates a new object from
                              the template referenced and hands off remediation of
                              the machine to a controller that lives outside of Cluster
                              API."
                              properties:
                                apiVersion:
                                  description: API version of the referent.
                                  type: string
                                fieldPath:
                                  description: 'If referring to a piece of an object
                                  instead of an entire object, this string should
                                  contain a valid JSON/Go field access statement,
                                  such as desiredState.manifest.containers[2]. For
                                  example, if the object reference is to a container
                                  within a pod, this would take on a value like: "spec.containers{name}"
                                  (where "name" refers to the name of the container
                                  that triggered the event) or if no container name
                                  is specified "spec.containers[2]" (container with
                                  index 2 in this pod). This syntax is chosen only
                                  to have some well-defined way of referencing a part
                                  of an object. TODO: this design is not final and
                                  this field is subject to change in the future.'
                                  type: string
                                kind:
                                  description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                                  type: string
                                name:
                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                                  type: string
                                namespace:
                                  description: 'Namespace of the referent. More info:
                                  https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                                  type: string
                                resourceVersion:
                                  description: 'Specific resourceVersion to which this
                                  reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                                  type: string
                                uid:
                                  description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                                  type: string
                              type: object
                              x-kubernetes-map-type: atomic
                            unhealthyConditions:
                              description: UnhealthyConditions contains a list of the
                                conditions that determine whether a node is considered
                                unhealthy. The conditions are combined in a logical
                                OR, i.e. if any of the conditions is met, the node is
                                unhealthy.
                              items:
                                description: UnhealthyCondition represents a Node condition
                                  type and value with a timeout specified as a duration.  When
                                  the named condition has been in the given status for
                                  at least the timeout value, a node is considered unhealthy.
                                properties:
                                  status:
                                    minLength: 1
                                    type: string
                                  timeout:
                                    type: string
                                  type:
                                    minLength: 1
                                    type: string
                                required:
                                  - status
                                  - timeout
                                  - type
                                type: object
                              type: array
                            unhealthyRange:
                              description: 'Any further remediation is only allowed
                              if the number of machines selected by "selector" as
                              not healthy is within the range of "UnhealthyRange".
                              Takes precedence over MaxUnhealthy. Eg. "[3-5]" - This
                              means that remediation will be allowed only when: (a)
                              there are at least 3 unhealthy machines (and) (b) there
                              are at most 5 unhealthy machines'
                              pattern: ^\[[0-9]+-[0-9]+\]$
                              type: string
                          type: object
                        metadata:
                          description: Metadata is the metadata applied to the ControlPlane
                            and the Machines of the ControlPlane if the ControlPlaneTemplate
                            referenced by the ClusterClass is machine based. If not,
                            it is applied only to the ControlPlane. At runtime this
                            metadata is merged with the corresponding metadata from
                            the ClusterClass.
                          properties:
                            annotations:
                              additionalProperties:
                                type: string
                              description: 'Annotations is an unstructured key value
                              map stored with a resource that may be set by external
                              tools to store and retrieve arbitrary metadata. They
                              are not queryable and should be preserved when modifying
                              objects. More info: http://kubernetes.io/docs/user-guide/annotations'
                              type: object
                            labels:
                              additionalProperties:
                                type: string
                              description: 'Map of string keys and values that can be
                              used to organize and categorize (scope and select) objects.
                              May match selectors of replication controllers and services.
                              More info: http://kubernetes.io/docs/user-guide/labels'
                              type: object
                          type: object
                        nodeDeletionTimeout:
                          description: NodeDeletionTimeout defines how long the controller
                            will attempt to delete the Node that the Machine hosts after
                            the Machine is marked for deletion. A duration of 0 will
                            retry deletion indefinitely. Defaults to 10 seconds.
                          type: string
                        nodeDrainTimeout:
                          description: 'NodeDrainTimeout is the total amount of time
                          that the controller will spend on draining a node. The default
                          value is 0, meaning that the node can be drained without
                          any time limitations. NOTE: NodeDrainTimeout is different
                          from `kubectl drain --timeout`'
                          type: string
                        nodeVolumeDetachTimeout:
                          description: NodeVolumeDetachTimeout is the total amount of
                            time that the controller will spend on waiting for all volumes
                            to be detached. The default value is 0, meaning that the
                            volumes can be detached without any time limitations.
                          type: string
                        replicas:
                          description: Replicas is the number of control plane nodes.
                            If the value is nil, the ControlPlane object is created
                            without the number of Replicas and it's assumed that the
                            control plane controller does not implement support for
                            this field. When specified against a control plane provider
                            that lacks support for this field, this value will be ignored.
                          format: int32
                          type: integer
                      type: object
                    rolloutAfter:
                      description: 'RolloutAfter performs a rollout of the entire cluster
                      one component at a time, control plane first and then machine
                      deployments. Deprecated: This field has no function and is going
                      to be removed in the next apiVersion.'
                      format: date-time
                      type: string
                    variables:
                      description: Variables can be used to customize the Cluster through
                        patches. They must comply to the corresponding VariableClasses
                        defined in the ClusterClass.
                      items:
                        description: ClusterVariable can be used to customize the Cluster
                          through patches. Each ClusterVariable is associated with a
                          Variable definition in the ClusterClass `status` variables.
                        properties:
                          definitionFrom:
                            description: 'DefinitionFrom specifies where the definition
                            of this Variable is from. DefinitionFrom is `inline` when
                            the definition is from the ClusterClass `.spec.variables`
                            or the name of a patch defined in the ClusterClass `.spec.patches`
                            where the patch is external and provides external variables.
                            This field is mandatory if the variable has `DefinitionsConflict:
                            true` in ClusterClass `status.variables[]`'
                            type: string
                          name:
                            description: Name of the variable.
                            type: string
                          value:
                            description: 'Value of the variable. Note: the value will
                            be validated against the schema of the corresponding ClusterClassVariable
                            from the ClusterClass. Note: We have to use apiextensionsv1.JSON
                            instead of a custom JSON type, because controller-tools
                            has a hard-coded schema for apiextensionsv1.JSON which
                            cannot be produced by another type via controller-tools,
                            i.e. it is not possible to have no type field. Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111'
                            x-kubernetes-preserve-unknown-fields: true
                        required:
                          - name
                          - value
                        type: object
                      type: array
                    version:
                      description: The Kubernetes version of the cluster.
                      type: string
                    workers:
                      description: Workers encapsulates the different constructs that
                        form the worker nodes for the cluster.
                      properties:
                        machineDeployments:
                          description: MachineDeployments is a list of machine deployments
                            in the cluster.
                          items:
                            description: MachineDeploymentTopology specifies the different
                              parameters for a set of worker nodes in the topology.
                              This set of nodes is managed by a MachineDeployment object
                              whose lifecycle is managed by the Cluster controller.
                            properties:
                              class:
                                description: Class is the name of the MachineDeploymentClass
                                  used to create the set of worker nodes. This should
                                  match one of the deployment classes defined in the
                                  ClusterClass object mentioned in the `Cluster.Spec.Class`
                                  field.
                                type: string
                              failureDomain:
                                description: FailureDomain is the failure domain the
                                  machines will be created in. Must match a key in the
                                  FailureDomains map stored on the cluster object.
                                type: string
                              machineHealthCheck:
                                description: MachineHealthCheck allows to enable, disable
                                  and override the MachineHealthCheck configuration
                                  in the ClusterClass for this MachineDeployment.
                                properties:
                                  enable:
                                    description: "Enable controls if a MachineHealthCheck
                                    should be created for the target machines. \n
                                    If false: No MachineHealthCheck will be created.
                                    \n If not set(default): A MachineHealthCheck will
                                    be created if it is defined here or in the associated
                                    ClusterClass. If no MachineHealthCheck is defined
                                    then none will be created. \n If true: A MachineHealthCheck
                                    is guaranteed to be created. Cluster validation
                                    will block if `enable` is true and no MachineHealthCheck
                                    definition is available."
                                    type: boolean
                                  maxUnhealthy:
                                    anyOf:
                                      - type: integer
                                      - type: string
                                    description: Any further remediation is only allowed
                                      if at most "MaxUnhealthy" machines selected by
                                      "selector" are not healthy.
                                    x-kubernetes-int-or-string: true
                                  nodeStartupTimeout:
                                    description: Machines older than this duration without
                                      a node will be considered to have failed and will
                                      be remediated. If you wish to disable this feature,
                                      set the value explicitly to 0.
                                    type: string
                                  remediationTemplate:
                                    description: "RemediationTemplate is a reference
                                    to a remediation template provided by an infrastructure
                                    provider. \n This field is completely optional,
                                    when filled, the MachineHealthCheck controller
                                    creates a new object from the template referenced
                                    and hands off remediation of the machine to a
                                    controller that lives outside of Cluster API."
                                    properties:
                                      apiVersion:
                                        description: API version of the referent.
                                        type: string
                                      fieldPath:
                                        description: 'If referring to a piece of an
                                        object instead of an entire object, this string
                                        should contain a valid JSON/Go field access
                                        statement, such as desiredState.manifest.containers[2].
                                        For example, if the object reference is to
                                        a container within a pod, this would take
                                        on a value like: "spec.containers{name}" (where
                                        "name" refers to the name of the container
                                        that triggered the event) or if no container
                                        name is specified "spec.containers[2]" (container
                                        with index 2 in this pod). This syntax is
                                        chosen only to have some well-defined way
                                        of referencing a part of an object. TODO:
                                        this design is not final and this field is
                                        subject to change in the future.'
                                        type: string
                                      kind:
                                        description: 'Kind of the referent. More info:
                                        https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                                        type: string
                                      name:
                                        description: 'Name of the referent. More info:
                                        https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                                        type: string
                                      namespace:
                                        description: 'Namespace of the referent. More
                                        info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                                        type: string
                                      resourceVersion:
                                        description: 'Specific resourceVersion to which
                                        this reference is made, if any. More info:
                                        https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                                        type: string
                                      uid:
                                        description: 'UID of the referent. More info:
                                        https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                                        type: string
                                    type: object
                                    x-kubernetes-map-type: atomic
                                  unhealthyConditions:
                                    description: UnhealthyConditions contains a list
                                      of the conditions that determine whether a node
                                      is considered unhealthy. The conditions are combined
                                      in a logical OR, i.e. if any of the conditions
                                      is met, the node is unhealthy.
                                    items:
                                      description: UnhealthyCondition represents a Node
                                        condition type and value with a timeout specified
                                        as a duration.  When the named condition has
                                        been in the given status for at least the timeout
                                        value, a node is considered unhealthy.
                                      properties:
                                        status:
                                          minLength: 1
                                          type: string
                                        timeout:
                                          type: string
                                        type:
                                          minLength: 1
                                          type: string
                                      required:
                                        - status
                                        - timeout
                                        - type
                                      type: object
                                    type: array
                                  unhealthyRange:
                                    description: 'Any further remediation is only allowed
                                    if the number of machines selected by "selector"
                                    as not healthy is within the range of "UnhealthyRange".
                                    Takes precedence over MaxUnhealthy. Eg. "[3-5]"
                                    - This means that remediation will be allowed
                                    only when: (a) there are at least 3 unhealthy
                                    machines (and) (b) there are at most 5 unhealthy
                                    machines'
                                    pattern: ^\[[0-9]+-[0-9]+\]$
                                    type: string
                                type: object
                              metadata:
                                description: Metadata is the metadata applied to the
                                  MachineDeployment and the machines of the MachineDeployment.
                                  At runtime this metadata is merged with the corresponding
                                  metadata from the ClusterClass.
                                properties:
                                  annotations:
                                    additionalProperties:
                                      type: string
                                    description: 'Annotations is an unstructured key
                                    value map stored with a resource that may be set
                                    by external tools to store and retrieve arbitrary
                                    metadata. They are not queryable and should be
                                    preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations'
                                    type: object
                                  labels:
                                    additionalProperties:
                                      type: string
                                    description: 'Map of string keys and values that
                                    can be used to organize and categorize (scope
                                    and select) objects. May match selectors of replication
                                    controllers and services. More info: http://kubernetes.io/docs/user-guide/labels'
                                    type: object
                                type: object
                              minReadySeconds:
                                description: Minimum number of seconds for which a newly
                                  created machine should be ready. Defaults to 0 (machine
                                  will be considered available as soon as it is ready)
                                format: int32
                                type: integer
                              name:
                                description: Name is the unique identifier for this
                                  MachineDeploymentTopology. The value is used with
                                  other unique identifiers to create a MachineDeployment's
                                  Name (e.g. cluster's name, etc). In case the name
                                  is greater than the allowed maximum length, the values
                                  are hashed together.
                                type: string
                              nodeDeletionTimeout:
                                description: NodeDeletionTimeout defines how long the
                                  controller will attempt to delete the Node that the
                                  Machine hosts after the Machine is marked for deletion.
                                  A duration of 0 will retry deletion indefinitely.
                                  Defaults to 10 seconds.
                                type: string
                              nodeDrainTimeout:
                                description: 'NodeDrainTimeout is the total amount of
                                time that the controller will spend on draining a
                                node. The default value is 0, meaning that the node
                                can be drained without any time limitations. NOTE:
                                NodeDrainTimeout is different from `kubectl drain
                                --timeout`'
                                type: string
                              nodeVolumeDetachTimeout:
                                description: NodeVolumeDetachTimeout is the total amount
                                  of time that the controller will spend on waiting
                                  for all volumes to be detached. The default value
                                  is 0, meaning that the volumes can be detached without
                                  any time limitations.
                                type: string
                              replicas:
                                description: Replicas is the number of worker nodes
                                  belonging to this set. If the value is nil, the MachineDeployment
                                  is created without the number of Replicas (defaulting
                                  to 1) and it's assumed that an external entity (like
                                  cluster autoscaler) is responsible for the management
                                  of this value.
                                format: int32
                                type: integer
                              strategy:
                                description: The deployment strategy to use to replace
                                  existing machines with new ones.
                                properties:
                                  rollingUpdate:
                                    description: Rolling update config params. Present
                                      only if MachineDeploymentStrategyType = RollingUpdate.
                                    properties:
                                      deletePolicy:
                                        description: DeletePolicy defines the policy
                                          used by the MachineDeployment to identify
                                          nodes to delete when downscaling. Valid values
                                          are "Random, "Newest", "Oldest" When no value
                                          is supplied, the default DeletePolicy of MachineSet
                                          is used
                                        enum:
                                          - Random
                                          - Newest
                                          - Oldest
                                        type: string
                                      maxSurge:
                                        anyOf:
                                          - type: integer
                                          - type: string
                                        description: 'The maximum number of machines
                                        that can be scheduled above the desired number
                                        of machines. Value can be an absolute number
                                        (ex: 5) or a percentage of desired machines
                                        (ex: 10%). This can not be 0 if MaxUnavailable
                                        is 0. Absolute number is calculated from percentage
                                        by rounding up. Defaults to 1. Example: when
                                        this is set to 30%, the new MachineSet can
                                        be scaled up immediately when the rolling
                                        update starts, such that the total number
                                        of old and new machines do not exceed 130%
                                        of desired machines. Once old machines have
                                        been killed, new MachineSet can be scaled
                                        up further, ensuring that total number of
                                        machines running at any time during the update
                                        is at most 130% of desired machines.'
                                        x-kubernetes-int-or-string: true
                                      maxUnavailable:
                                        anyOf:
                                          - type: integer
                                          - type: string
                                        description: 'The maximum number of machines
                                        that can be unavailable during the update.
                                        Value can be an absolute number (ex: 5) or
                                        a percentage of desired machines (ex: 10%).
                                        Absolute number is calculated from percentage
                                        by rounding down. This can not be 0 if MaxSurge
                                        is 0. Defaults to 0. Example: when this is
                                        set to 30%, the old MachineSet can be scaled
                                        down to 70% of desired machines immediately
                                        when the rolling update starts. Once new machines
                                        are ready, old MachineSet can be scaled down
                                        further, followed by scaling up the new MachineSet,
                                        ensuring that the total number of machines
                                        available at all times during the update is
                                        at least 70% of desired machines.'
                                        x-kubernetes-int-or-string: true
                                    type: object
                                  type:
                                    description: Type of deployment. Default is RollingUpdate.
                                    enum:
                                      - RollingUpdate
                                      - OnDelete
                                    type: string
                                type: object
                              variables:
                                description: Variables can be used to customize the
                                  MachineDeployment through patches.
                                properties:
                                  overrides:
                                    description: Overrides can be used to override Cluster
                                      level variables.
                                    items:
                                      description: ClusterVariable can be used to customize
                                        the Cluster through patches. Each ClusterVariable
                                        is associated with a Variable definition in
                                        the ClusterClass `status` variables.
                                      properties:
                                        definitionFrom:
                                          description: 'DefinitionFrom specifies where
                                          the definition of this Variable is from.
                                          DefinitionFrom is `inline` when the definition
                                          is from the ClusterClass `.spec.variables`
                                          or the name of a patch defined in the ClusterClass
                                          `.spec.patches` where the patch is external
                                          and provides external variables. This field
                                          is mandatory if the variable has `DefinitionsConflict:
                                          true` in ClusterClass `status.variables[]`'
                                          type: string
                                        name:
                                          description: Name of the variable.
                                          type: string
                                        value:
                                          description: 'Value of the variable. Note:
                                          the value will be validated against the
                                          schema of the corresponding ClusterClassVariable
                                          from the ClusterClass. Note: We have to
                                          use apiextensionsv1.JSON instead of a custom
                                          JSON type, because controller-tools has
                                          a hard-coded schema for apiextensionsv1.JSON
                                          which cannot be produced by another type
                                          via controller-tools, i.e. it is not possible
                                          to have no type field. Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111'
                                          x-kubernetes-preserve-unknown-fields: true
                                      required:
                                        - name
                                        - value
                                      type: object
                                    type: array
                                type: object
                            required:
                              - class
                              - name
                            type: object
                          type: array
                      type: object
                  required:
                    - class
                    - version
                  type: object
              type: object
            status:
              description: ClusterStatus defines the observed state of Cluster.
              properties:
                conditions:
                  description: Conditions defines current service state of the cluster.
                  items:
                    description: Condition defines an observation of a Cluster API resource
                      operational state.
                    properties:
                      lastTransitionTime:
                        description: Last time the condition transitioned from one status
                          to another. This should be when the underlying condition changed.
                          If that is not known, then using the time when the API field
                          changed is acceptable.
                        format: date-time
                        type: string
                      message:
                        description: A human readable message indicating details about
                          the transition. This field may be empty.
                        type: string
                      reason:
                        description: The reason for the condition's last transition
                          in CamelCase. The specific API may choose whether or not this
                          field is considered a guaranteed API. This field may not be
                          empty.
                        type: string
                      severity:
                        description: Severity provides an explicit classification of
                          Reason code, so the users or machines can immediately understand
                          the current situation and act accordingly. The Severity field
                          MUST be set only when Status=False.
                        type: string
                      status:
                        description: Status of the condition, one of True, False, Unknown.
                        type: string
                      type:
                        description: Type of condition in CamelCase or in foo.example.com/CamelCase.
                          Many .condition.type values are consistent across resources
                          like Available, but because arbitrary conditions can be useful
                          (see .node.status.conditions), the ability to deconflict is
                          important.
                        type: string
                    required:
                      - lastTransitionTime
                      - status
                      - type
                    type: object
                  type: array
                controlPlaneReady:
                  description: ControlPlaneReady defines if the control plane is ready.
                  type: boolean
                failureDomains:
                  additionalProperties:
                    description: FailureDomainSpec is the Schema for Cluster API failure
                      domains. It allows controllers to understand how many failure
                      domains a cluster can optionally span across.
                    properties:
                      attributes:
                        additionalProperties:
                          type: string
                        description: Attributes is a free form map of attributes an
                          infrastructure provider might use or require.
                        type: object
                      controlPlane:
                        description: ControlPlane determines if this failure domain
                          is suitable for use by control plane machines.
                        type: boolean
                    type: object
                  description: FailureDomains is a slice of failure domain objects synced
                    from the infrastructure provider.
                  type: object
                failureMessage:
                  description: FailureMessage indicates that there is a fatal problem
                    reconciling the state, and will be set to a descriptive error message.
                  type: string
                failureReason:
                  description: FailureReason indicates that there is a fatal problem
                    reconciling the state, and will be set to a token value suitable
                    for programmatic interpretation.
                  type: string
                infrastructureReady:
                  description: InfrastructureReady is the state of the infrastructure
                    provider.
                  type: boolean
                observedGeneration:
                  description: ObservedGeneration is the latest generation observed
                    by the controller.
                  format: int64
                  type: integer
                phase:
                  description: Phase represents the current phase of cluster actuation.
                    E.g. Pending, Running, Terminating, Failed etc.
                  type: string
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
